﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using Sistema_Totem.Clases;
using Sistema_Totem.Logica.Comandos.ComandoLogin;
using Sistema_Totem.Logica.Comandos;
using Sistema_Totem.Presentacion.Contrato.Login;
using Sistema_Totem.Logica.Fabricas;

namespace Sistema_Totem.Presentacion.Presentador.Login
{
    public class PresentadorLogin
    {
        #region Atributos

        private IContratoLogin _vista;
        private string _mensajeErrorVacio = "Faltan campos por rellenar.";
        private string _mensajeErrorUsuario = "Error, Usuario y/o Contraseña no encontrado.";
        private int _idUsuario;
        private Usuario _usuario;
        private Comando<bool> _comandoBool;
        private Comando<int> _comandoInt;
        private Comando<Entidad> _comandoEntidad;
        
        #endregion Atributos.

        #region Constructor

        public PresentadorLogin(IContratoLogin _vista)
        {
            this._vista = _vista;
        }

        #endregion Constructor

        #region Metodos

        /// <summary>
        /// Metodo que hace las llamadas para validar los camposy al usuario para luego logearlo en sistema
        /// </summary>
        public void LogearUsuario()
        {
            if (ValidarDatos())
            {
                if (ValidarUsuario())
                {
                    _idUsuario = ConsultarIdUsuario();
                    _comandoEntidad = FabricaComando.CrearComandoConsultarUsuario(_idUsuario);
                    _usuario = _comandoEntidad.Ejecutar() as Usuario;
                    _vista.Sesion["usuario"] = _usuario;
                    if(_usuario.TipoUsuario.ToString() == "Analista")
                        _vista.Redireccionar("../Proyectos/ListarProyecto.aspx");
                    if(_usuario.TipoUsuario.ToString() == "Gerente de proyecto")
                        _vista.Redireccionar("../Proyectos/ListarProyectoGerente.aspx");
                    if (_usuario.TipoUsuario.ToString() == "Administrador")
                        _vista.Redireccionar("../../../indexAdmin.aspx");
                }
                else
                {
                    _vista.MensajeError.Text = _mensajeErrorUsuario;
                    _vista.MensajeError.Visible = true;
                }
            }
        }
        
        /// <summary>
        /// Método que valida si hay campos vacios
        /// </summary>
        private bool ValidarDatos()
        {
            if ((_vista.NombreUsuarioTexto.Text=="") || (_vista.ContrasenaTexto.Text==""))
            {
                _vista.MensajeError.Text = _mensajeErrorVacio;
                _vista.MensajeError.Visible = true;
                return false;
            }
            else
                return true;
        }

        /// <summary>
        /// Método que ejecuta el comando validar usuario para comprobar si el usuario se encuentra en base de datos
        /// </summary>
        private bool ValidarUsuario()
        {
            _comandoBool = FabricaComando.CrearComandoValidarUsuario(_vista.NombreUsuarioTexto.Text,
                       _vista.ContrasenaTexto.Text);
            return _comandoBool.Ejecutar();
        }

        /// <summary>
        /// Metodo que devuelve el id del usuario
        /// </summary>
        private int ConsultarIdUsuario()
        {
            _comandoInt = FabricaComando.CrearComandoConsultarIdUsuario(_vista.NombreUsuarioTexto.Text,
                      _vista.ContrasenaTexto.Text);
            return _comandoInt.Ejecutar();
        }
                
        #endregion Metodos

    }
}